/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package negocios;

import ejb.AlumnoFacade;
import ejb.FinalFacade;
import ejb.InscripcionFacade;
import ejb.MesaFacade;
import ejb.RegularidadFacade;
import entidades.Alumno;
import entidades.Final;
import entidades.Inscripcion;
import entidades.Materia;
import entidades.Mesa;
import entidades.Regularidad;
import java.sql.Date;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.ejb.LocalBean;

/**
 *
 * @author Administrador
 */
@Stateless
@LocalBean
public class AltaInscripciones {
    
    //beans
    @EJB
    private MesaFacade mesaFacade;
    @EJB
    private InscripcionFacade inscripcionFacade;
    @EJB
    private FinalFacade finalFacade;
    @EJB
    private RegularidadFacade regularidadFacade;
    @EJB
    private AlumnoFacade alumnoFacade;
    
    //Entidades
    private Mesa entidadMesa;
    private Inscripcion entidadInscripcion;
    private Alumno entidadAlumno;
    
    //Listas
    private List<Regularidad> regularidades;
    private List<Final> finales;
    private List<Materia> materiasRendibles;
    private List<Materia> materiasNoRendibles;
    private List<Materia> aprobadas;
    private List<Mesa> mesas;
    private List<Mesa> mesasFuturas;
    
    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method")

    @PostConstruct
    public void constructor(){
        regularidades = new ArrayList<Regularidad>();
        finales = new ArrayList<Final>();
        materiasRendibles = new ArrayList<Materia>();
        materiasNoRendibles = new ArrayList<Materia>();
        aprobadas = new ArrayList<Materia>();
        mesas = new ArrayList<Mesa>();
        mesasFuturas = new ArrayList<Mesa>();
        entidadInscripcion = new Inscripcion();
    }
    
    public String consultaMateriasPorRendir(long idAlumno) {
        
        String retorno = "";
        entidadAlumno = alumnoFacade.find(idAlumno);
        regularidades = regularidadFacade.getRegularidadesByAlumno(entidadAlumno);
        finales = finalFacade.getFinalByAlumno(entidadAlumno);
        
        for (Regularidad regularidad: regularidades){
            if ((regularidad.getRegularidad().equals("REGULAR") || regularidad.getRegularidad().equals("NO REGULAR"))) {
                materiasRendibles.add(regularidad.getMateria());
            }
        }
        
        for (Final f: finales){
            if (f.getNotaFinal() >= 4){
                if (materiasRendibles.indexOf(f.getInscripcion().getMesa().getMateria()) == -1){
                    materiasRendibles.remove(f.getInscripcion().getMesa().getMateria());
                }
                aprobadas.add(f.getInscripcion().getMesa().getMateria());
            }
        }
        
        for (Materia m: materiasRendibles){
            int aux = 0;
            if(!m.getCorrelativas().isEmpty()){
                for(Materia c: m.getCorrelativas()){
                    if (aprobadas.indexOf(c)==-1)
                        aux=1;
                }
            }
            if(aux==1)
                materiasNoRendibles.add(m);
        }
        
        for (Materia m: materiasNoRendibles){
            materiasRendibles.remove(m);
        }
        
        Calendar fechaActual = Calendar.getInstance();
        String prueba = fechaActual.get(Calendar.YEAR)+"-"+((fechaActual.get(Calendar.MONTH)+"").length()==1 ? "0"+fechaActual.get(Calendar.MONTH) : fechaActual.get(Calendar.MONTH))+"-"+fechaActual.get(Calendar.DATE);
        Date fecha = Date.valueOf(prueba);
        for (Materia m : materiasRendibles){
            mesas = mesaFacade.getMesasByMateria(m);
            
            for (Mesa mesa :  mesas){
                
                if(mesa.getFecha().after(fecha)){
                    mesasFuturas.add(mesa);
                }
            }
        }
        
        if (!mesasFuturas.isEmpty()){
            retorno = " <?xml version=\"1.0\" encoding=\"UTF-8\"?>";
            retorno += "<mesas>";
            for(Mesa mesa : mesasFuturas){
                retorno += "<mesa>";
                retorno += "<idmesa>" + mesa.getIdMesa() + "</idmesa>";
                retorno += "<materia>" + mesa.getMateria().getNombre() + "</materia>";
                retorno += "<fecha>" + mesa.getFecha() + "</fecha>";
                retorno += "<regularidad>";
                retorno += regularidadFacade.getRegularidadesByAlumnoAndMateria(entidadAlumno, mesa.getMateria()).get(0).getRegularidad();
                retorno += "</regularidad>";
                retorno += "</mesa>";
            }
            retorno += "</mesas>";
        }else{
            retorno = "0";
        }
        return retorno;
    }

    public String guardarInscripcion(long idAlumno, long idMesa) {
        //
        String retorno = "";
        //revisar que no este ya inscripto
        entidadAlumno = alumnoFacade.find(idAlumno);
        entidadMesa = mesaFacade.find(idMesa);
        entidadInscripcion.setAlumno(entidadAlumno);
        entidadInscripcion.setMesa(entidadMesa); 
        
        if (inscripcionFacade.getInscripcionesByAlumnoMateria(entidadInscripcion).isEmpty()){
            inscripcionFacade.create(entidadInscripcion);
            retorno = "0";
        }else{
            retorno += "2";
        }
        return retorno;
    }
    
}
